package com.internetCafes.spms.web.certificate.service;

import com.internetCafes.spms.core.model.pageModel.DataGrid;
import com.internetCafes.spms.web.certificate.entity.EmployeeInfo;
import com.internetCafes.spms.web.certificate.model.employee.podo.EmployeeDo;
import com.internetCafes.spms.web.certificate.model.employee.podo.EmployeePo;
import com.internetCafes.spms.web.certificate.model.podo.EmployeeInfoDo;
import com.internetCafes.spms.web.certificate.model.podo.EmployeeInfoPo;
import com.internetCafes.spms.web.certificate.vo.EmployeeInfoVo;
import com.internetCafes.spms.web.certificate.vo.EntryQuitInfo;

import java.util.List;
import java.util.Map;

/**
 * 员工信息表
 *
 * @author Sunny
 * @email rekeeper2011@hotmail.com
 * @date 2019-10-31 18:10:59
 */
public interface EmployeeInfoService {

    /**
     * 获取信息 不为null
     *
     * @param id id
     * @return 员工信息
     */
    EmployeeInfo findByIdNotNull(Long id);

    /**
     * 通过指定参数获取人员列表
     *
     * @param employeeDo 请求参数
     * @return 人员列表
     */
    List<EmployeePo> list(EmployeeDo employeeDo);

    /**
     * 获取人员列表信息
     *
     * @param employeeInfoDo 请求参数
     * @return 人员列表
     */
    List<EmployeeInfoPo> listPoNoTenantId(EmployeeInfoDo employeeInfoDo);

    /**
     * 获取人员列表，并进行去重操作，获取人员
     *
     * @return 人员列表
     * @author Zheng
     */
    List<EmployeeInfo> queryRepeat();

    /**
     * 为对应企业id获取employeeFlag为1，deptId为null的人员信息进行更新部门id，
     *
     * @param tenantId 企业id
     * @param deptId   部门id
     * @author Zheng
     */
    void updateNonDeptIdEmployees(Long tenantId, Long deptId);

    /**
     * 获取employeeFlag为1，deptId为null 或者 0 的数据
     *
     * @return 员工信息列表
     * @author Zheng
     */
    List<EmployeeInfo> queryEmployeeNonDeptId();

    /**
     * 将企业用户中所有employeeFlag为1，type为0的数据，将type置为23
     *
     * @ahthor Zheng
     */
    void repairEmployeeTypeError();

    /**
     * 员工employee_flag错误信息修复
     *
     * @author Zheng
     */
    void repairEmployeeFlagErrorInfo();

    /**
     * 删除多余的员工信息
     *
     * @param idCard   身份证号
     * @param id       不删除的id
     * @param tenantId 企业id
     * @author Zheng
     */
    void removalRepeatEmployee(String idCard, Long tenantId, Long id);

    /**
     * 获取重复人员信息列表 id 身份证
     *
     * @return 人员信息
     */
    List<EmployeeInfo> queryListForRepeat();

    /**
     * 查询
     */
    List<EmployeeInfo> query(Map<String, Object> params);

    /**
     * ID查询
     */
    EmployeeInfo findById(Long id);

    /**
     * 获取当月信息
     *
     * @return
     */
    EntryQuitInfo countByMonth(EmployeeInfo employeeInfo);

    /**
     * ID批量查询
     */
    List<EmployeeInfo> queryByIds(List<Long> ids);

    /**
     * 参数分页查询
     */
    List<EmployeeInfo> page(Map<String, Object> params, int page, int rows);

    /**
     * 参数查询总数
     */
    long count(Map<String, Object> params);

    /**
     * First查询
     */
    EmployeeInfo findFirst(Map<String, Object> params);

    /**
     * 保存
     */
    int save(EmployeeInfo employeeInfo);

    /**
     * 批量保存
     */
    int saveBatch(List<EmployeeInfo> employeeInfoList);

    /**
     * 选择保存
     */
    int saveSelective(EmployeeInfo employeeInfo);

    /**
     * 修改
     */
    int update(EmployeeInfo employeeInfo);

    /**
     * 按主键ID更新
     */
    int updateEntire(EmployeeInfo employeeInfo);

    /**
     * 选择修改
     */
    int updateSelective(EmployeeInfo employeeInfo);

    /**
     * 删除
     */
    int delete(Long id);

    /**
     * 批量删除
     */
    int deleteBatch(List<Long> ids);

    /**
     * 批量删除
     */
    void deleteBatch(Long[] ids);


    /**
     * DataGrid
     */
    DataGrid dataGrid(Map<String, Object> params, int pageNo, int pageSize);


    /**
     * @param params
     * @return
     */
    List<EmployeeInfoVo> selectByParamsUnionDept(Map<String, Object> params);


    /**
     * @param params
     * @return
     */
    List<EmployeeInfoVo> selectByParamsUnionTenant(Map<String, Object> params);


    List<EmployeeInfoVo> selectByJobParams(Map<String, Object> params);

    List<EmployeeInfoVo> selectByParamsUnionCertificate(Map<String, Object> params);

}
